package org.study.clickhouse.plus.boot.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.*;
import com.baomidou.mybatisplus.extension.plugins.pagination.DialectFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * MybatisPlus 配置类
 *
 * @author Administrator
 */
@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 分页插件
        PaginationInnerInterceptor pageInterceptor = new PaginationInnerInterceptor();
        // 溢出总页数后是否进行处理，默认 false
        pageInterceptor.setOverflow(false);
        // 单页分页条数限制，默认无限制
        pageInterceptor.setMaxLimit(10000L);
        // 数据库类型，根据类型获取应使用的分页方言
        pageInterceptor.setDbType(DbType.CLICK_HOUSE);
        pageInterceptor.setDialect(DialectFactory.getDialect(DbType.CLICK_HOUSE));
        interceptor.addInnerInterceptor(pageInterceptor);
        // 乐观锁插件：当要更新一条记录的时候，希望这条记录没有被别人更新
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        // 防全表更新与删除插件：针对 update 和 delete 语句，阻止恶意的全表更新删除
        interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
        return interceptor;
    }
}
